package Tipos;

/**
 * Class OperaMate representa los operadores matemáticos,
 * imita a un enumerado de C.
 * 
 * @author Martín Montalvo Martínez
 */
public class OperaMate{
    
    public static enum operaMate{SUMA,RESTA,MULTIPLICA,BARRADIV,DIV,MOD};
    
    private operaMate tipo;
    
    public OperaMate(){
        
    }
    
    /**
     *Crea un operador matemático a partir del enumerado
     */
    public OperaMate(operaMate opera){
        tipo=opera;
    }
    
    /**Constructora como parámetros un String.
     *Para la suma reconoce tanto SUMA como el signo +
     *Para la resta reconoce tanto RESTA como el signo -
     *Para la division(/) reconoce tanto BARRADIV como el signo /
     *Para la division(DIV) reconoce DIV
     *Para el modulo(MOD) reconoce MOD
     *A la hora de comparar la cadena no tiene en cuenta
     *las mayúsculas y si no casa con ningun valor del enumerado
     *devuelve el operador suma.
     */
    public OperaMate(String opera){
        try{
            if(opera.compareTo("+")==0)
                tipo=operaMate.SUMA;
            else if(opera.compareTo("-")==0)
                tipo=operaMate.RESTA;
            else if(opera.compareTo("*")==0)
                tipo=operaMate.MULTIPLICA;
            else if(opera.compareTo("/")==0)
                tipo=operaMate.BARRADIV;
            else if(opera.compareTo("DIV")==0)
                tipo=operaMate.DIV;
            else if(opera.compareTo("MOD")==0)
                tipo=operaMate.MOD;
            else tipo=operaMate.valueOf(opera);
        }
        catch(IllegalArgumentException a){
            tipo=operaMate.valueOf("SUMA");
        }
    }
    
    /**
     *Devuelve el valor del enumerado del operador
     */
    public String getTipo(){
        return tipo.toString();
    }
    
    /**
     *Devuelve el resultado de comparar los operadores matemáticos.
     *Si devuelve Cierto son iguales, eoc son distintos
     */ 
    public Boolean equals(OperaMate oper2){
        if(tipo.toString()==oper2.toString())
            return true;
        return false;
    }
    
    public static void main(String args[]){
        OperaMate token= new OperaMate("Barradiv");
        System.out.println(token.getTipo());
        
        OperaMate token2= new OperaMate("Inven");
        System.out.println(token2.getTipo());
    }
}